<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
	<meta name="keywords" content="Nacos,架构" />
	<meta name="description" content="Nacos 架构" />
	<!-- 网页标签标题 -->
	<title>Nacos 架构</title>
	<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1hgJpHAPoK1RjSZKbXXX1IXXa-64-64.png"/>
	<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
	<div id="root"><div class="documentation-page" data-reactroot="" data-reactid="1" data-react-checksum="1664960698"><header class="header-container header-container-normal" data-reactid="2"><div class="header-body" data-reactid="3"><a href="/zh-cn/index.html" data-reactid="4"><img class="logo" src="/img/nacos_colorful.png" data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span class="icon-search" data-reactid="7"></span></div><span class="language-switch language-switch-normal" data-reactid="8">En</span><div class="header-menu" data-reactid="9"><img class="header-menu-toggle" src="/img/menu_gray.png" data-reactid="10"/><ul data-reactid="11"><li class="menu-item menu-item-normal" data-reactid="12"><a href="/zh-cn/index.html" data-reactid="13">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active" data-reactid="14"><a href="/zh-cn/docs/what-is-nacos.html" data-reactid="15">文档</a></li><li class="menu-item menu-item-normal" data-reactid="16"><a href="/zh-cn/blog/index.html" data-reactid="17">博客</a></li><li class="menu-item menu-item-normal" data-reactid="18"><a href="/zh-cn/community/index.html" data-reactid="19">社区</a></li><li class="menu-item menu-item-normal" data-reactid="20"><a href="https://cn.aliyun.com/product/aliware/mse?spm=nacos-website.topbar.0.0.0" data-reactid="21">企业版Nacos</a><img class="menu-img" src="https://img.alicdn.com/tfs/TB1esl_m.T1gK0jSZFrXXcNCXXa-200-200.png" data-reactid="22"/></li><li class="menu-item menu-item-normal" data-reactid="23"><a href="https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&amp;positionCode=GP633620" data-reactid="24">招贤纳士</a><img class="menu-img" src="https://img.alicdn.com/tfs/TB1esl_m.T1gK0jSZFrXXcNCXXa-200-200.png" data-reactid="25"/></li><li class="menu-item menu-item-normal" data-reactid="26"><a href="http://console.nacos.io/nacos/index.html" data-reactid="27">控制台样例</a></li></ul></div></div></header><div class="bar" data-reactid="28"><div class="bar-body" data-reactid="29"><img src="/img/docs.png" class="front-img" data-reactid="30"/><div class="bar-title" data-reactid="31"><span data-reactid="32">Nacos 文档</span><div class="bone bone-light" data-reactid="33"></div></div><img src="/img/docs.png" class="back-img" data-reactid="34"/></div></div><section class="content-section" data-reactid="35"><div class="content-body" data-reactid="36"><div class="sidemenu" data-reactid="37"><div class="sidemenu-toggle" data-reactid="38"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png" data-reactid="39"/></div><ul data-reactid="40"><li class="menu-item menu-item-level-1" data-reactid="41"><span data-reactid="42">Nacos </span><ul data-reactid="43"><li style="height:180px;overflow:hidden;" class="menu-item menu-item-level-2" data-reactid="44"><span data-reactid="45"><!-- react-text: 46 -->Nacos是什么?<!-- /react-text --><img style="transform:rotate(0deg);" class="menu-toggle" src="/img/arrow_down.png" data-reactid="47"/></span><ul data-reactid="48"><li class="menu-item menu-item-level-3" data-reactid="49"><a href="/zh-cn/docs/what-is-nacos.html" target="_self" data-reactid="50">Nacos简介</a></li><li class="menu-item menu-item-level-3" data-reactid="51"><a href="/zh-cn/docs/concepts.html" target="_self" data-reactid="52">概念</a></li><li class="menu-item menu-item-level-3" data-reactid="53"><a href="/zh-cn/docs/architecture.html" target="_self" data-reactid="54">架构</a></li><li class="menu-item menu-item-level-3" data-reactid="55"><a href="/zh-cn/docs/feature-list.html" target="_self" data-reactid="56">功能和需求列表</a></li></ul></li><li style="height:324px;overflow:hidden;" class="menu-item menu-item-level-2" data-reactid="57"><span data-reactid="58"><!-- react-text: 59 -->快速开始<!-- /react-text --><img style="transform:rotate(0deg);" class="menu-toggle" src="/img/arrow_down.png" data-reactid="60"/></span><ul data-reactid="61"><li class="menu-item menu-item-level-3" data-reactid="62"><a href="/zh-cn/docs/quick-start.html" target="_self" data-reactid="63">Nacos</a></li><li class="menu-item menu-item-level-3" data-reactid="64"><a href="/zh-cn/docs/quick-start-spring.html" target="_self" data-reactid="65">Nacos Spring</a></li><li class="menu-item menu-item-level-3" data-reactid="66"><a href="/zh-cn/docs/quick-start-spring-boot.html" target="_self" data-reactid="67">Nacos Spring Boot</a></li><li class="menu-item menu-item-level-3" data-reactid="68"><a href="/zh-cn/docs/quick-start-spring-cloud.html" target="_self" data-reactid="69">Nacos Spring Cloud</a></li><li class="menu-item menu-item-level-3" data-reactid="70"><a href="/zh-cn/docs/quick-start-docker.html" target="_self" data-reactid="71">Nacos Docker</a></li><li class="menu-item menu-item-level-3" data-reactid="72"><a href="/zh-cn/docs/use-nacos-with-dubbo.html" target="_self" data-reactid="73">Nacos Dubbo</a></li><li class="menu-item menu-item-level-3" data-reactid="74"><a href="/zh-cn/docs/use-nacos-with-kubernetes.html" target="_self" data-reactid="75">Nacos k8s</a></li><li class="menu-item menu-item-level-3" data-reactid="76"><a href="/zh-cn/docs/nacos-sync.html" target="_self" data-reactid="77">Nacos Sync</a></li></ul></li><li style="height:252px;overflow:hidden;" class="menu-item menu-item-level-2" data-reactid="78"><span data-reactid="79"><!-- react-text: 80 -->用户指南<!-- /react-text --><img style="transform:rotate(0deg);" class="menu-toggle" src="/img/arrow_down.png" data-reactid="81"/></span><ul data-reactid="82"><li class="menu-item menu-item-level-3" data-reactid="83"><a href="/zh-cn/docs/sdk.html" target="_self" data-reactid="84">Java的SDK</a></li><li class="menu-item menu-item-level-3" data-reactid="85"><a href="/zh-cn/docs/other-language.html" target="_self" data-reactid="86">其他语言的SDK</a></li><li class="menu-item menu-item-level-3" data-reactid="87"><a href="/zh-cn/docs/open-api.html" target="_self" data-reactid="88">Open-API指南</a></li><li class="menu-item menu-item-level-3" data-reactid="89"><a href="/zh-cn/docs/nacos-spring.html" target="_self" data-reactid="90">Nacos Spring</a></li><li class="menu-item menu-item-level-3" data-reactid="91"><a href="/zh-cn/docs/system-configurations.html" target="_self" data-reactid="92">Nacos系统参数介绍</a></li><li class="menu-item menu-item-level-3" data-reactid="93"><a href="/zh-cn/docs/faq.html" target="_self" data-reactid="94">FAQ</a></li></ul></li><li style="height:36px;overflow:hidden;" class="menu-item menu-item-level-2" data-reactid="95"><span data-reactid="96"><!-- react-text: 97 -->运维指南<!-- /react-text --><img style="transform:rotate(-90deg);" class="menu-toggle" src="/img/arrow_down.png" data-reactid="98"/></span><ul data-reactid="99"><li class="menu-item menu-item-level-3" data-reactid="100"><a href="/zh-cn/docs/deployment.html" target="_self" data-reactid="101">部署手册</a></li><li class="menu-item menu-item-level-3" data-reactid="102"><a href="/zh-cn/docs/cluster-mode-quick-start.html" target="_self" data-reactid="103">集群部署说明</a></li><li class="menu-item menu-item-level-3" data-reactid="104"><a href="/zh-cn/docs/management-api.html" target="_self" data-reactid="105">运维API</a></li><li class="menu-item menu-item-level-3" data-reactid="106"><a href="/zh-cn/docs/console-guide.html" target="_self" data-reactid="107">控制台手册</a></li><li class="menu-item menu-item-level-3" data-reactid="108"><a href="/zh-cn/docs/monitor-guide.html" target="_self" data-reactid="109">监控手册</a></li><li class="menu-item menu-item-level-3" data-reactid="110"><a href="/zh-cn/docs/nacos-config-benchmark.html" target="_self" data-reactid="111">服务配置模块压测报告</a></li><li class="menu-item menu-item-level-3" data-reactid="112"><a href="/zh-cn/docs/nacos-naming-benchmark.html" target="_self" data-reactid="113">服务发现模块压测报告</a></li><li class="menu-item menu-item-level-3" data-reactid="114"><a href="/zh-cn/docs/nacos-sync-use.html" target="_self" data-reactid="115">其他环境迁移到Nacos</a></li></ul></li><li style="height:36px;overflow:hidden;" class="menu-item menu-item-level-2" data-reactid="116"><span data-reactid="117"><!-- react-text: 118 -->开源共建<!-- /react-text --><img style="transform:rotate(-90deg);" class="menu-toggle" src="/img/arrow_down.png" data-reactid="119"/></span><ul data-reactid="120"><li class="menu-item menu-item-level-3" data-reactid="121"><a href="/zh-cn/docs/contributing.html" target="_self" data-reactid="122">贡献源码</a></li><li class="menu-item menu-item-level-3" data-reactid="123"><a href="/zh-cn/docs/contributing-flow.html" target="_self" data-reactid="124">贡献流程</a></li><li class="menu-item menu-item-level-3" data-reactid="125"><a href="/zh-cn/docs/pull-request.html" target="_self" data-reactid="126">pull request模板</a></li><li class="menu-item menu-item-level-3" data-reactid="127"><a href="/zh-cn/docs/how-to-reporting-bugs.html" target="_self" data-reactid="128">如何提交问题报告</a></li></ul></li><li style="height:36px;overflow:hidden;" class="menu-item menu-item-level-2" data-reactid="129"><span data-reactid="130"><!-- react-text: 131 -->社区<!-- /react-text --><img style="transform:rotate(-90deg);" class="menu-toggle" src="/img/arrow_down.png" data-reactid="132"/></span><ul data-reactid="133"><li class="menu-item menu-item-level-3" data-reactid="134"><a href="/zh-cn/docs/community.html" target="_self" data-reactid="135">社区</a></li><li class="menu-item menu-item-level-3" data-reactid="136"><a href="/zh-cn/docs/nacos-dev.html" target="_self" data-reactid="137">开发团队</a></li></ul></li></ul></li></ul></div><div class="doc-content markdown-body" data-reactid="138"><h1>Nacos 架构</h1>
<h2>基本架构及概念</h2>
<p><img src="https://cdn.nlark.com/yuque/0/2019/jpeg/338441/1561217892717-1418fb9b-7faa-4324-87b9-f1740329f564.jpeg" alt="nacos_arch.jpg"></p>
<h3>服务 (Service)</h3>
<p>服务是指一个或一组软件功能（例如特定信息的检索或一组操作的执行），其目的是不同的客户端可以为不同的目的重用（例如通过跨进程的网络调用）。Nacos 支持主流的服务生态，如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.</p>
<h3>服务注册中心 (Service Registry)</h3>
<p>服务注册中心，它是服务，其实例及元数据的数据库。服务实例在启动时注册到服务注册表，并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。</p>
<h3>服务元数据 (Service Metadata)</h3>
<p>服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据</p>
<h3>服务提供方 (Service Provider)</h3>
<p>是指提供可复用和可调用服务的应用方</p>
<h3>服务消费方 (Service Consumer)</h3>
<p>是指会发起对某个服务调用的应用方</p>
<h3>配置 (Configuration)</h3>
<p>在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理，以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物（如 WAR，JAR 包等）更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中，由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。</p>
<h3>配置管理 (Configuration Management)</h3>
<p>在数据中心中，系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。</p>
<h3>名字服务 (Naming Service)</h3>
<p>提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务，例如 ServiceName -&gt; Endpoints Info, Distributed Lock Name -&gt; Lock Owner/Status Info, DNS Domain Name -&gt; IP List, 服务发现和 DNS 就是名字服务的2大场景。</p>
<h3>配置服务 (Configuration Service)</h3>
<p>在服务或者应用运行过程中，提供动态配置或者元数据以及配置管理的服务提供者。</p>
<h3><a href="./concepts.md">更多概念...</a></h3>
<h2>逻辑架构及其组件介绍</h2>
<p><img src="https://cdn.nlark.com/yuque/0/2019/png/338441/1561217775318-6e408805-18bb-4242-b4e9-83c5b929b469.png" alt="nacos-logic.jpg"></p>
<ul>
<li>服务管理：实现服务CRUD，域名CRUD，服务健康状态检查，服务权重管理等功能</li>
<li>配置管理：实现配置管CRUD，版本管理，灰度管理，监听管理，推送轨迹，聚合数据等功能</li>
<li>元数据管理：提供元数据CURD 和打标能力</li>
<li>插件机制：实现三个模块可分可合能力，实现扩展点SPI机制</li>
<li>事件机制：实现异步化事件通知，sdk数据变化异步通知等逻辑</li>
<li>日志模块：管理日志分类，日志级别，日志可移植性（尤其避免冲突），日志格式，异常码+帮助文档</li>
<li>回调机制：sdk通知数据，通过统一的模式回调用户处理。接口和数据结构需要具备可扩展性</li>
<li>寻址模式：解决ip，域名，nameserver、广播等多种寻址模式，需要可扩展</li>
<li>推送通道：解决server与存储、server间、server与sdk间推送性能问题</li>
<li>容量管理：管理每个租户，分组下的容量，防止存储被写爆，影响服务可用性</li>
<li>流量管理：按照租户，分组等多个维度对请求频率，长链接个数，报文大小，请求流控进行控制</li>
<li>缓存机制：容灾目录，本地缓存，server缓存机制。容灾目录使用需要工具</li>
<li>启动模式：按照单机模式，配置模式，服务模式，dns模式，或者all模式，启动不同的程序+UI</li>
<li>一致性协议：解决不同数据，不同一致性要求情况下，不同一致性机制</li>
<li>存储模块：解决数据持久化、非持久化存储，解决数据分片问题</li>
<li>Nameserver：解决namespace到clusterid的路由问题，解决用户环境与nacos物理环境映射问题</li>
<li>CMDB：解决元数据存储，与三方cmdb系统对接问题，解决应用，人，资源关系</li>
<li>Metrics：暴露标准metrics数据，方便与三方监控系统打通</li>
<li>Trace：暴露标准trace，方便与SLA系统打通，日志白平化，推送轨迹等能力，并且可以和计量计费系统打通</li>
<li>接入管理：相当于阿里云开通服务，分配身份、容量、权限过程</li>
<li>用户管理：解决用户管理，登录，sso等问题</li>
<li>权限管理：解决身份识别，访问控制，角色管理等问题</li>
<li>审计系统：扩展接口方便与不同公司审计系统打通</li>
<li>通知系统：核心数据变更，或者操作，方便通过SMS系统打通，通知到对应人数据变更</li>
<li>OpenAPI：暴露标准Rest风格HTTP接口，简单易用，方便多语言集成</li>
<li>Console：易用控制台，做服务管理、配置管理等操作</li>
<li>SDK：多语言sdk</li>
<li>Agent：dns-f类似模式，或者与mesh等方案集成</li>
<li>CLI：命令行对产品进行轻量化管理，像git一样好用</li>
</ul>
<h2>领域模型</h2>
<h3>数据模型</h3>
<p>Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串，公共命名空间（public），分组默认是 DEFAULT_GROUP。</p>
<p><img src="https://cdn.nlark.com/yuque/0/2019/jpeg/338441/1561217857314-95ab332c-acfb-40b2-957a-aae26c2b5d71.jpeg" alt="nacos_data_model"></p>
<h3>服务领域模型</h3>
<p><img src="https://cdn.nlark.com/yuque/0/2019/jpeg/338441/1561217924697-ba504a35-129f-4fc6-b0df-1130b995375a.jpeg" alt="nacos_naming_data_model"></p>
<h3>配置领域模型</h3>
<p>围绕配置，主要有两个关联的实体，一个是配置变更历史，一个是服务标签（用于打标分类，方便索引），由 ID 关联。</p>
<p><img src="https://cdn.nlark.com/yuque/0/2019/jpeg/338441/1561217958896-4465757f-f588-4797-9c90-a76e604fabb4.jpeg" alt="nacos_config_er"></p>
<h2>类视图</h2>
<h3>Nacos-SDK 类视图</h3>
<p>服务部分待续</p>
<p><img src="https://cdn.nlark.com/yuque/0/2019/jpeg/338441/1561218077514-bfa98d03-88a1-43b9-b014-1491406e3db7.jpeg" alt="nacos_sdk_class_relation"></p>
<h2>构建物、部署及启动模式</h2>
<p><img src="https://cdn.yuque.com/lark/0/2018/png/15914/1531730742844-e8325932-258b-49b2-9473-8d1199efe20d.png" alt="undefined"></p>
<h3>两种交付工件</h3>
<p>Nacos 支持标准 Docker 镜像(TODO: 0.2版本开始支持）及 zip(tar.gz)压缩包的构建物。</p>
<h3>两种启动模式</h3>
<p>Nacos 支持将注册中心(Service Registry）与配置中心(Config Center) 在一个进程合并部署或者将2者分离部署的两种模式。</p>
<h3>免费的公有云服务模式</h3>
<p>除了您自己部署和启动 Nacos 服务之外，在云计算时代，Nacos 也支持公有云模式，在阿里云公有云的商业产品（如<a href="https://www.aliyun.com/product/acm">ACM</a>, <a href="https://www.aliyun.com/product/edas">EDAS</a>) 中会提供 Nacos 的免费的公有云服务。我们也欢迎和支持其他的公有云提供商提供 Nacos 的公有云服务。</p>
</div></div></section><footer class="footer-container" data-reactid="139"><div class="footer-body" data-reactid="140"><img src="/img/nacos_gray.png" data-reactid="141"/><div class="cols-container" data-reactid="142"><div class="col col-12" data-reactid="143"><h3 data-reactid="144">愿景</h3><p data-reactid="145">Nacos 通过提供简单易用的动态服务发现、服务配置、服务共享与管理等服务基础设施，帮助用户在云原生时代，在私有云、混合云或者公有云等所有云环境中，更好的构建、交付、管理自己的微服务平台，更快的复用和组合业务服务，更快的交付商业创新的价值，从而为用户赢得市场。</p></div><div class="col col-6" data-reactid="146"><dl data-reactid="147"><dt data-reactid="148">文档</dt><dd data-reactid="149"><a href="/zh-cn/docs/what-is-nacos.html" target="_self" data-reactid="150">概览</a></dd><dd data-reactid="151"><a href="/zh-cn/docs/quick-start.html" target="_self" data-reactid="152">快速开始</a></dd><dd data-reactid="153"><a href="/zh-cn/docs/contributing.html" target="_self" data-reactid="154">开发者指南</a></dd></dl></div><div class="col col-6" data-reactid="155"><dl data-reactid="156"><dt data-reactid="157">资源</dt><dd data-reactid="158"><a href="/zh-cn/community/index.html" target="_self" data-reactid="159">社区</a></dd><dd data-reactid="160"><a href="https://www.aliyun.com/product/acm?source_type=nacos_pc_20181219" target="_self" data-reactid="161">云服务 ACM</a></dd><dd data-reactid="162"><a href="https://www.aliyun.com/product/edas?source_type=nacos_pc_20181219" target="_self" data-reactid="163">云服务 EDAS</a></dd><dd data-reactid="164"><a href="https://www.aliyun.com/product/ahas?source_type=nacos_pc_20190225" target="_self" data-reactid="165">云服务 AHAS</a></dd></dl></div></div><div class="copyright" data-reactid="166"><span data-reactid="167">@ 2018 The Nacos Authors | An Alibaba Middleware (Aliware) Project</span></div></div></footer></div></div>
	<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
	<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
	<script>
		window.rootPath = '';
  </script>
	<script src="/build/documentation.js"></script>
</body>
</html>